package cn.mujiankeji.mbrowser.界面.小窗页.管理

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.Tab
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.功能.浏览框.模型.网络文件信息
import cn.mujiankeji.mbrowser.界面.框架.小窗视图.小窗状态
import cn.mujiankeji.mbrowser.界面.组件.布局.IOS窗口布局
import kotlinx.coroutines.flow.MutableStateFlow

class 网页日记窗口状态(val 日记列表: MutableStateFlow<MutableList<网络文件信息>>) : 小窗状态() {
    var 选中 by mutableStateOf(日记类型枚举.所有)
    var 搜索关键词 by mutableStateOf("")
    
    // 获取筛选后的日记列表
    fun 获取筛选日记列表(): List<网络文件信息> {
        val 所有日记 = 日记列表.value
        
        // 根据类型和关键词筛选
        return 所有日记.filter { 日记 ->
            // 首先按类型筛选
            val 类型匹配 = when (选中) {
                日记类型枚举.所有 -> true
                日记类型枚举.媒体 -> 日记.文件类型.contains("video") || 日记.文件类型.contains("audio")
                日记类型枚举.图片 -> 日记.文件类型.contains("image")
                日记类型枚举.脚本 -> 日记.文件类型.contains("javascript") || 日记.地址.endsWith(".js")
                日记类型枚举.其它 -> {
                    !日记.文件类型.contains("video") && 
                    !日记.文件类型.contains("audio") && 
                    !日记.文件类型.contains("image") && 
                    !日记.文件类型.contains("javascript") && 
                    !日记.地址.endsWith(".js")
                }
            }
            
            // 然后按关键词筛选
            val 关键词匹配 = if (搜索关键词.isNotEmpty()) {
                日记.地址.contains(搜索关键词, ignoreCase = true) || 
                日记.文件类型.contains(搜索关键词, ignoreCase = true)
            } else {
                true
            }
            
            类型匹配 && 关键词匹配
        }
    }
}

enum class 日记类型枚举 {
    所有, 媒体, 图片, 脚本, 其它
}

@Composable
fun 网页日记窗口实现(state: 网页日记窗口状态) {
    IOS窗口布局(
        标题 = "网页资源日记",
        销毁 = {
            state.销毁小窗()
        }
    ) {
        Column(modifier = Modifier.fillMaxSize()) {
            // 搜索框
            OutlinedTextField(
                value = state.搜索关键词,
                onValueChange = { state.搜索关键词 = it },
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(horizontal = 16.dp, vertical = 8.dp),
                placeholder = { Text("搜索资源...") },
                leadingIcon = { Icon(Icons.Default.Search, contentDescription = "搜索") },
                trailingIcon = {
                    if (state.搜索关键词.isNotEmpty()) {
                        IconButton(onClick = { state.搜索关键词 = "" }) {
                            Icon(Icons.Default.Close, contentDescription = "清除")
                        }
                    }
                },
                singleLine = true
            )
            
            // 分类标签
            ScrollableTabRow(
                selectedTabIndex = state.选中.ordinal,
                edgePadding = 16.dp,
                modifier = Modifier.fillMaxWidth()
            ) {
                日记类型枚举.values().forEachIndexed { index, 类型 ->
                    Tab(
                        selected = state.选中 == 类型,
                        onClick = { state.选中 = 类型 },
                        text = { Text(类型.name) }
                    )
                }
            }
            
            // 筛选后的日记列表
            val 筛选日记列表 = state.获取筛选日记列表()
            
            if (筛选日记列表.isEmpty()) {
                // 显示空状态
                Box(
                    modifier = Modifier.weight(1f).fillMaxWidth(),
                    contentAlignment = Alignment.Center
                ) {
                    Text("没有找到匹配的资源")
                }
            } else {
                // 显示日记列表
                LazyColumn(
                    modifier = Modifier.weight(1f)
                ) {
                    items(筛选日记列表) { 日记 ->
                        日记项目(日记)
                    }
                }
            }
        }
    }
}

@Composable
fun 日记项目(日记: 网络文件信息) {
    Column(
        modifier = Modifier
            .fillMaxWidth()
            .clickable {
                // 可以添加点击操作，如复制地址等
                // 地址操作.复制(日记.地址)
            }
            .padding(16.dp)
    ) {
        // 显示资源类型
        Text(
            text = 日记.文件类型.ifEmpty { "未知类型" },
            style = MaterialTheme.typography.labelMedium,
            color = MaterialTheme.colorScheme.primary
        )
        
        Spacer(modifier = Modifier.height(4.dp))
        
        // 显示地址
        Text(
            text = 日记.地址,
            style = MaterialTheme.typography.bodyMedium,
            maxLines = 2,
            overflow = TextOverflow.Ellipsis
        )
        
        // 如果被广告拦截，显示拦截信息
        日记.广告过滤规则?.let { 规则 ->
            Spacer(modifier = Modifier.height(4.dp))
            
            Row(
                verticalAlignment = Alignment.CenterVertically,
                modifier = Modifier
                    .background(
                        MaterialTheme.colorScheme.errorContainer,
                        MaterialTheme.shapes.small
                    )
                    .padding(horizontal = 8.dp, vertical = 4.dp)
            ) {
                Text(
                    text = "已拦截",
                    style = MaterialTheme.typography.labelSmall,
                    color = MaterialTheme.colorScheme.error
                )
                
                Spacer(modifier = Modifier.width(4.dp))
                
                Text(
                    text = 规则.规则文本(),
                    style = MaterialTheme.typography.labelSmall,
                    color = MaterialTheme.colorScheme.onErrorContainer
                )
            }
        }
    }
    
    Divider(
        modifier = Modifier.padding(horizontal = 16.dp),
        color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f)
    )
}